/**
* Este aspecto esta comentado porque foi utilizado em um outro sistema
* com outras especiicacoes e nao foi adaptado para esses exemplos 
* pela falta dependencias que o mesmo tinha no projeto implantado
*/



////import javax.faces.context.FacesContext;
////import java.util.*;
////import org.aspectj.lang.JoinPoint;
////import java.lang.reflect.Method;
////import org.aspectj.lang.Signature;
////import org.aspectj.lang.reflect.MethodSignature;
////import java.text.SimpleDateFormat;
////
//public aspect AspectService{
//    
//    static EventoService eventoService = null;
//    
//    static {
//        try {
//            eventoService = (EventoService) FabricaDeAppService.getAppService(EventoService.class);
//        } catch (Exception e) {
//        System.out.println("erro ao gerar eventoService no AspectJService");
//    }
//}
//
//pointcut services(): execution (public * br.uff.iduff2.service..*.*(..)) 
//&& !execution(* br.uff.iduff2.service.controletransacao..*.*(..)) 
//&& !execution(List br.uff.iduff2.service..*.*(..))
//&& !execution(* br.uff.iduff2.service.publico.IdentificacaoService.autenticar(..));
//
//pointcut autenticar(): execution(* br.uff.iduff2.service.publico.IdentificacaoService.autenticar(..));
//
//Identificacao around () throws AutenticacaoInvalidaException : autenticar(){
//    Identificacao id = proceed();
//    Evento e = new Evento();
//    e.setIdIdentificacao(id.getIdIdentificacao());
//    String params = "";
//    Object[] argumentos = thisJoinPoint.getArgs();
//    int fim = argumentos.length-1;
//    
//    if(fim>=0){
//        for (int i = 0; i <= fim; i++) {
//            Object elem = argumentos[i];
//            params += elem.getClass().getSimpleName() + " RESTRITO";
//            if(i<fim) params +=", ";
//        }
//    }
//    logar(thisJoinPoint, e, params);
//    return id;
//}
//
//
//after() returning : services(){
////    if(true) return;
//    SessaoDoUsuario sessao = (SessaoDoUsuario)getBean("SessaoDoUsuario");
//    if ( sessao == null) return;
//    Identificacao id = sessao.getIdentificacaoLogada();
//    if ( id == null) return;
//    Evento e = new Evento();
//    e.setIdIdentificacao(id.getIdIdentificacao());
//    String params = "";
//    Object[] argumentos = thisJoinPoint.getArgs();
//    int fim = argumentos.length-1;
//    
//    if(fim>=0){
//        for (int i = 0; i <= fim; i++) {
//            Object elem = argumentos[i];
//            params += elem.getClass().getSimpleName();
//            if ( !(elem instanceof Calendar)){
//                params +=" "+elem.toString();
//            }else if(elem != null){
//            SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
//            Calendar gc = (Calendar) elem;
//            params += sdf.format(gc.getTime());
//        }
//        if(i<fim) params +=", ";
//        }
//    }
//    logar(thisJoinPoint, e, params);
//    
//}
//
//private void logar(JoinPoint joinPoint, Evento e, String params){
//    Calendar dataAgora = new GregorianCalendar();
//    e.setDataEvento(dataAgora);
//    
//    String dados = ""; 
//    Signature sig = joinPoint.getSignature();
//    
//    if (sig instanceof MethodSignature) {
//        Method metodo = ((MethodSignature)sig).getMethod();
//        dados += metodo.getReturnType().getSimpleName();
//    }
//    String strClasse = joinPoint.getSourceLocation().getWithinType().getSimpleName();
//    
//    dados += " "+strClasse+"."+sig.getName()+ "("+params+")";
//    e.setDados(dados);
//    eventoService.incluir(e);
//}
//
//private Object getBean(final String nome) {
//    final FacesContext contexto = FacesContext.getCurrentInstance();
//    if(contexto == null) return null;
//    return contexto.getApplication().getVariableResolver().resolveVariable(contexto, nome);
//}
//
//}
////
